// Copyright 2019 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Flags: --allow-natives-syntax
let f, g;
(function () {
  function opt(flag) {
    function inline() {
      (function () {
        flag();
      })();
      flag = 1;
    }
    inline();
  }
  assertThrows(opt, TypeError);
})();

(function () {
  function opt(flag) {
    function inline() {
      var f = function () {
        return flag;
      };
      function g(x) {
        flag = x;
      }

      return [f, g];
    }
    return inline();
  }
  [f, g] = opt(1);

  ArkTools.prepareFunctionForOptimization(f);
  assertEquals(1, f());
  assertEquals(1, f());
  ArkTools.optimizeFunctionOnNextCall(f);
  assertEquals(1, f());

  g(2);

  assertEquals(2, f());
})();
